package 力扣_中等题;

import java.util.HashSet;
import java.util.Set;

/**
 * @author 连安利
 * @version 1.0
 * @date 2021/3/19 21:13
 */

public class 无重复字符的最长子串 {
    public static void main(String[] args) {
        String s = "ababccabcd";
        System.out.println(lengthOfLongestSubstring(s));
    }
    public static int lengthOfLongestSubstring(String s) {
        // 记录字符上一次出现的位置
     Set<Character> occ = new HashSet<Character>();
     char[] pro = s.toCharArray();
     int res = 0;
     int n = s.length();
     int right = -1;//right定义为-1，如果定义为0；后面的++right：可能会导致下一次while发生数组越界
     for(int i = 0; i < n; i++){
         if(i!=0){
             occ.remove(pro[i-1]);
         }
         while(right + 1 < n && !occ.contains(pro[right + 1]) ){//这里应该先判断right + 1 <n,不然会发生数组越界
             occ.add(pro[right+1]);
             ++right;
         }
         res = Math.max(res , right - i + 1);
     }

     return res;
    }
}
